Subclasse numpy.ndarray é uma decisão arquitetônica de alto nível usada para criar estruturas de dados específicas de domínio que encapsulam metadados (como unidades, coordenadas ou taxas de amostragem) junto com os dados numéricos brutos. Diferentemente das classes padrão do Python, objetos do NumPy são frequentemente criados sem chamar __init__.
O Triângulo de Inicialização
Arquitetos devem considerar três caminhos distintos de instanciação em que o construtor padrão é ignorado:
- Construção Explícita: Usando o nome da classe (gerenciado por
__new__). - Casting de Visualização: Reinterpretar uma matriz existente como sua subclasse.
- Novo a partir de modelo: Criando um corte ou cópia de uma instância existente da subclasse.
O hook especializado __array_finalize__ é o ponto de convergência onde os metadados são sincronizados entre esses caminhos.
Fragilidade Comportamental
A subclasse cria um acoplamento estreito com a API C do NumPy. Operações que retornam escalares (por exemplo, np.mean()) muitas vezes "remover" a identidade da subclasse, revertendo para um padrão ndarray. A gestão de metadados, portanto, representa um risco constante, a menos que seja cuidadosamente gerenciada por meio de transições de estado.
isinstance(obj, np.ndarray). Caso contrário, Composição (envolvendo uma matriz) é mais seguro.